package com.mvc.controller;

import hbm.TipoGasto;
import hbm.TipoGastoDAO;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class TipoGastoController extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<TipoGasto> listaTipoGasto = new TipoGastoDAO().findAll();
				request.getSession().setAttribute("listadoTipoGasto",
						listaTipoGasto);
				response.sendRedirect("./jsp/eliminarTipoGasto.jsp");
			} else {
				String idTipoGasto = request.getParameter("idTipoGasto");
				TipoGasto tp = new TipoGasto();
				tp.setId(Integer.parseInt(idTipoGasto));
				Session session = new TipoGastoDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(tp);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoTipoGasto.jsp");
			}
		}

		if (opcion != null && opcion.equals("TipoGasto")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				String nombreTipoGasto = request.getParameter("txtdescripcion");

				TipoGasto tp = new TipoGasto(nombreTipoGasto, null);

				Session session = new TipoGastoDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(tp);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoTipoGasto.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new TipoGastoDAO().getSession();
			List<TipoGasto> listaTipoGasto = new TipoGastoDAO().findAll();
			request.getSession().setAttribute("listaTipoGasto", listaTipoGasto);
			session.close();
			response.sendRedirect("./jsp/mantenimientoTipoGasto.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<TipoGasto> listaTipoGasto = new TipoGastoDAO().findAll();
				request.getSession().setAttribute("listadoTipoGasto",
						listaTipoGasto);
				response.sendRedirect("./jsp/seleccionTipoGasto.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idTipoGasto = Integer.parseInt(request
					.getParameter("idTipoGasto"));
			TipoGasto tp = new TipoGastoDAO().findById(idTipoGasto);
			request.getSession().setAttribute("idTipoGastoSeleccionado",
					tp.getId());
			request.getSession().setAttribute(
					"descripcionTipoGastoSeleccionada", tp.getDescripcion());

			response.sendRedirect("./jsp/editarTipoGasto.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Integer idTipoGasto = Integer.parseInt(request
						.getParameter("idTipoGasto"));
				String nombreTipoGasto = request.getParameter("txtdescripcion");
				TipoGasto tp = new TipoGastoDAO().findById(idTipoGasto);
				tp.setDescripcion(nombreTipoGasto);
				Session session = new TipoGastoDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(tp);
				tx.commit();
				session.close();
				List<TipoGasto> listaTipoGasto = new TipoGastoDAO().findAll();
				request.getSession().setAttribute("listadoTipoGasto",
						listaTipoGasto);
				response.sendRedirect("./jsp/mantenimientoTipoGasto.jsp");
			}
		}
	}
}
